package com.reading.core.manager;

import com.reading.common.entity.view.Book;
import com.reading.common.entity.view.BookChapter;
import com.reading.core.exception.AloneException;

import java.util.List;

/**
 * @author guwenqi_1995@163.com
 * @date 2019/7/8 3:19 PM
 **/
public interface IBookManager {

    //----------------------------------- 查询操作 ---------------------------------------//

    /**
     * 获取图书详细信息
     *
     * @param bookId    图书id
     * @param userId    用户id（用于判断用户是否点赞、是否收藏等状态）
     * @return 图书详细信息
     * @throws AloneException
     */
    Book getBook(Integer bookId, Integer userId) throws AloneException;

    /**
     * 获取图书集合
     *
     * @param book  图书筛选对象
     * @return 查找图书集合
     */
    List<Book> getBooks(Book book) throws AloneException;

    /**
     * 获取章节内容
     *
     * @param bookId    图书id
     * @param number    章节序号
     * @return  章节对象（1、章节标题，2、章节内容）
     * @throws AloneException
     */
    BookChapter getBookChapter(Integer bookId, Integer number) throws AloneException;

    //----------------------------------- 持久化操作 ---------------------------------------//

    /**
     * 保存图书信息
     *
     * @param book  图书信息
     * @throws AloneException
     */
    Book save(Book book) throws AloneException;

    /**
     * 添加图书新章节（添加一个章节）
     *
     * @param chapter   章节信息（图书id、章节标题、章节内容）
     * @return
     * @throws AloneException
     */
    BookChapter addChapter(BookChapter chapter) throws AloneException;

    /**
     * 添加图书新章节（添加多个章节）
     *
     * @param chapters  章节集合
     * @throws AloneException
     */
    void addChapter(List<BookChapter> chapters) throws AloneException;

    /**
     * 修改图书基本信息
     *
     * @param book  图书信息
     * @throws AloneException
     */
    void modify(Book book) throws AloneException;

    /**
     * 修改图书章节信息
     *
     * @param chapter   章节信息
     * @throws AloneException
     */
    void modifyChapter(BookChapter chapter) throws AloneException;


}
